<template>
  <div class="app-container">
    <el-form label-width="120px">
      <el-form-item label="讲师名称">
        <el-input v-model="teacher.name"/>
      </el-form-item>
      <el-form-item label="讲师排序">
        <el-input-number v-model="teacher.sort" controls-position="right" :min="0"/>
      </el-form-item>
      <el-form-item label="讲师头衔">
        <el-select v-model="teacher.level" clearable placeholder="请选择">
          <!--
            数据类型一定要和取出的json中的一致，否则没法回填
            因此，这里value使用动态绑定的值，保证其数据类型是number
          -->
          <el-option :value="1" label="高级讲师"/>
          <el-option :value="2" label="首席讲师"/>
        </el-select>
      </el-form-item>
      <el-form-item label="讲师资历">
        <el-input v-model="teacher.career"/>
      </el-form-item>
      <el-form-item label="讲师简介">
        <el-input v-model="teacher.intro" :rows="10" type="textarea"/>
      </el-form-item>

      <!-- 讲师头像 -->
      <el-form-item label="讲师头像">

          <!-- 头衔缩略图 -->
          <pan-thumb :image="teacher.avatar"/>
          <!-- 文件上传按钮 -->
          <el-button type="primary" icon="el-icon-upload" @click="imagecropperShow=true">更换头像
          </el-button>
          <!--
      v-show：是否显示上传组件
      :key：类似于id，如果一个页面多个图片上传控件，可以做区分
      :url：后台上传的url地址
      @close：关闭上传组件
      @crop-upload-success：上传成功后的回调 -->
          <image-cropper
                        v-show="imagecropperShow"
                        :width="300"
                        :height="300"
                        :key="imagecropperKey"
                        :url="BASE_API+'/eduoss/fileoss/uploadAvatar'"
                        field="file"
                        @close="close"
                        @crop-upload-success="cropSuccess"/>

      </el-form-item>
      <el-form-item>
        <el-button :disabled="saveBtnDisabled" type="primary" @click="saveOrUpdate">保存</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
import ImageCropper from '@/components/ImageCropper'
import PanThumb from '@/components/PanThumb'
import teacherApi from '@/api/edu/teacher'

export default {
  components: {
    ImageCropper,
    PanThumb 
  },
  data() {
    return {
      teacher: {
        name: '',
        sort: 0,
        level: 1,
        career: '',
        intro: '',
        avatar: ''
      },
      saveBtnDisabled: false, // 保存按钮是否禁用,
      imagecropperShow: false, // 图片上传弹框组件是否显示
      imagecropperKey:0, // 图片上传组件的唯一标识(组件key)
      BASE_API:process.env.BASE_API, // 获取dev.env.js里面的地址
    }
  },
  created() {
    this.init()
  },
  watch: {
    // watch的作用可以监控一个值的变换，并调用因为变化需要执行的方法。可以通过watch动态改变关联的状态。
    $route(to, from){
      // 这里监听的就是路由跳转时执行this.init()函数
      this.init()
    }
  },
  methods: {
    init(){
      if(this.$route.params && this.$route.params.id){
      //当路由参数不为空且包含id参数的时候,我们就根据讲师id来获取信息
      const id = this.$route.params.id
      this.getInfo(id)
    }else{
      //初始化teacher属性
      this.teacher = {}
    }
    },
    saveOrUpdate() {
      if(!this.teacher.id){
        // 当不存再id信息就进行添加,否则就进行跟新操作
        this.saveTeacher()
      }else{
        this.updatedTeacher()
      }
    },
    // 保存
    saveTeacher() {
      teacherApi.addTeacher(this.teacher).then(response => {
        this.$message({
          type:'success',
          message:'添加成功!'
        })
        //跳转回到列表页面
        this.$router.push({path:'/teacher/table'})
      }).catch(error => {
        this.$message({
          type:'error',
          message:'添加失败!'
        })
      })
    },
    getInfo(id){
      teacherApi.getTeacherInfo(id).then(response => {
        this.teacher = response.data.teacher
        console.log(this.teacher.avatar)
      }).catch(error => {
      })
    },
    updatedTeacher(){
      this.updatedTeacherInfo(this.teacher)
    },
    //跟新讲师信息
    updatedTeacherInfo(teacherInfo){
      teacherApi.updatedTeacherInfo(teacherInfo).then(response => {
        this.$message({
          type:'success',
          message:'跟新成功!'
        })
        this.$router.push({path:'/teacher/table'})
      }).catch(error => {
        this.$message({
          type:'error',
          message:'跟新失败!'
        })
      })
    },
    // 关闭上传窗口调用的方法
    close(){
      this.imagecropperShow = false
      this.imagecropperKey = this.imagecropperKey + 1
    },
    // 上传成功调用的方法
    cropSuccess(data){
      // 这里的data就已经被封装过了,实际效果就是response.data
      this.teacher.avatar = data.url // 文件上传至oss之后就会返回相对应的url,获取url然后赋值给属性
      this.imagecropperShow = false
      this.imagecropperKey = this.imagecropperKey + 1
      this.$message({
            type: 'success',
            message: '上传成功!'
          })
    }
  }
}
</script>